<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/linux/highuid.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/linux/highuid.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_X0xJTlVYX0hJR0hVSURfSF8w"><span class="b">_LINUX_HIGHUID_H</span></a>
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0xJTlVYX0hJR0hVSURfSF8w"><span class="b">_LINUX_HIGHUID_H</span></a>
<a name="3" /><span class="True">       3:</span> 
<a name="4" /><span class="True">       4:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">types</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="5" /><span class="True">       5:</span> 
<a name="6" /><span class="True">       6:</span> <span class="k">/*</span>
<a name="7" /><span class="True">       7:</span> <span class="k"> * general notes:</span>
<a name="8" /><span class="True">       8:</span> <span class="k"> *</span>
<a name="9" /><span class="True">       9:</span> <span class="k"> * CONFIG_UID16 is defined if the given architecture needs to</span>
<a name="10" /><span class="True">      10:</span> <span class="k"> * support backwards compatibility for old system calls.</span>
<a name="11" /><span class="True">      11:</span> <span class="k"> *</span>
<a name="12" /><span class="True">      12:</span> <span class="k"> * kernel code should use uid_t and gid_t at all times when dealing with</span>
<a name="13" /><span class="True">      13:</span> <span class="k"> * kernel-private data.</span>
<a name="14" /><span class="True">      14:</span> <span class="k"> *</span>
<a name="15" /><span class="True">      15:</span> <span class="k"> * old_uid_t and old_gid_t should only be different if CONFIG_UID16 is</span>
<a name="16" /><span class="True">      16:</span> <span class="k"> * defined, else the platform should provide dummy typedefs for them</span>
<a name="17" /><span class="True">      17:</span> <span class="k"> * such that they are equivalent to __kernel_{u,g}id_t.</span>
<a name="18" /><span class="True">      18:</span> <span class="k"> *</span>
<a name="19" /><span class="True">      19:</span> <span class="k"> * uid16_t and gid16_t are used on all architectures. (when dealing</span>
<a name="20" /><span class="True">      20:</span> <span class="k"> * with structures hard coded to 16 bits, such as in filesystems)</span>
<a name="21" /><span class="True">      21:</span> <span class="k"> */</span>
<a name="22" /><span class="True">      22:</span> 
<a name="23" /><span class="True">      23:</span> 
<a name="24" /><span class="True">      24:</span> <span class="k">/*</span>
<a name="25" /><span class="True">      25:</span> <span class="k"> * This is the &quot;overflow&quot; UID and GID. They are used to signify uid/gid</span>
<a name="26" /><span class="True">      26:</span> <span class="k"> * overflow to old programs when they request uid/gid information but are</span>
<a name="27" /><span class="True">      27:</span> <span class="k"> * using the old 16 bit interfaces.</span>
<a name="28" /><span class="True">      28:</span> <span class="k"> * When you run a libc5 program, it will think that all highuid files or</span>
<a name="29" /><span class="True">      29:</span> <span class="k"> * processes are owned by this uid/gid.</span>
<a name="30" /><span class="True">      30:</span> <span class="k"> * The idea is that it&apos;s better to do so than possibly return 0 in lieu of</span>
<a name="31" /><span class="True">      31:</span> <span class="k"> * 65536, etc.</span>
<a name="32" /><span class="True">      32:</span> <span class="k"> */</span>
<a name="33" /><span class="True">      33:</span> 
<a name="34" /><span class="True">      34:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">overflowuid</span><span class="f">;</span>
<a name="35" /><span class="True">      35:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">overflowgid</span><span class="f">;</span>
<a name="36" /><span class="True">      36:</span> 
<a name="37" /><span class="True">      37:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">__bad_uid</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="38" /><span class="True">      38:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">__bad_gid</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="39" /><span class="True">      39:</span> 
<a name="40" /><span class="True">      40:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVGQVVMVF9PVkVSRkxPV1VJRF8w"><span class="b">DEFAULT_OVERFLOWUID</span></a>    <span class="c">65534</span>
<a name="41" /><span class="True">      41:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVGQVVMVF9PVkVSRkxPV0dJRF8w"><span class="b">DEFAULT_OVERFLOWGID</span></a>    <span class="c">65534</span>
<a name="42" /><span class="True">      42:</span> 
<a name="43" /><span class="True">      43:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1VJRDE2XzA_"><span class="b">CONFIG_UID16</span></a>
<a name="44" /><span class="True">      44:</span> 
<a name="45" /><span class="True">      45:</span> <span class="k">/* prevent uid mod 65536 effect by returning a default value for high UIDs */</span>
<a name="46" /><span class="True">      46:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_aGlnaDJsb3d1aWRfMA__"><span class="b">high2lowuid</span></a><span class="f">(</span><span class="b">uid</span><span class="f">)</span> <span class="f">(</span><span class="f">(</span><span class="b">uid</span><span class="f">)</span> <span class="f">&amp;</span> <span class="f">~</span><span class="c">0xFFFF</span> <span class="f">?</span> <span class="f">(</span><span class="b">old_uid_t</span><span class="f">)</span><span class="b">overflowuid</span> <span class="f">:</span> <span class="f">(</span><span class="b">old_uid_t</span><span class="f">)</span><span class="f">(</span><span class="b">uid</span><span class="f">)</span><span class="f">)</span>
<a name="47" /><span class="True">      47:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_aGlnaDJsb3dnaWRfMA__"><span class="b">high2lowgid</span></a><span class="f">(</span><span class="b">gid</span><span class="f">)</span> <span class="f">(</span><span class="f">(</span><span class="b">gid</span><span class="f">)</span> <span class="f">&amp;</span> <span class="f">~</span><span class="c">0xFFFF</span> <span class="f">?</span> <span class="f">(</span><span class="b">old_gid_t</span><span class="f">)</span><span class="b">overflowgid</span> <span class="f">:</span> <span class="f">(</span><span class="b">old_gid_t</span><span class="f">)</span><span class="f">(</span><span class="b">gid</span><span class="f">)</span><span class="f">)</span>
<a name="48" /><span class="True">      48:</span> <span class="k">/*</span>
<a name="49" /><span class="True">      49:</span> <span class="k"> * -1 is different in 16 bits than it is in 32 bits</span>
<a name="50" /><span class="True">      50:</span> <span class="k"> * these macros are used by chown(), setreuid(), ...,</span>
<a name="51" /><span class="True">      51:</span> <span class="k"> */</span>
<a name="52" /><span class="True">      52:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bG93MmhpZ2h1aWRfMA__"><span class="b">low2highuid</span></a><span class="f">(</span><span class="b">uid</span><span class="f">)</span> <span class="f">(</span><span class="f">(</span><span class="b">uid</span><span class="f">)</span> <span class="f">==</span> <span class="f">(</span><span class="b">old_uid_t</span><span class="f">)</span><span class="f">-</span><span class="c">1</span> <span class="f">?</span> <span class="f">(</span><span class="b">uid_t</span><span class="f">)</span><span class="f">-</span><span class="c">1</span> <span class="f">:</span> <span class="f">(</span><span class="b">uid_t</span><span class="f">)</span><span class="f">(</span><span class="b">uid</span><span class="f">)</span><span class="f">)</span>
<a name="53" /><span class="True">      53:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bG93MmhpZ2hnaWRfMA__"><span class="b">low2highgid</span></a><span class="f">(</span><span class="b">gid</span><span class="f">)</span> <span class="f">(</span><span class="f">(</span><span class="b">gid</span><span class="f">)</span> <span class="f">==</span> <span class="f">(</span><span class="b">old_gid_t</span><span class="f">)</span><span class="f">-</span><span class="c">1</span> <span class="f">?</span> <span class="f">(</span><span class="b">gid_t</span><span class="f">)</span><span class="f">-</span><span class="c">1</span> <span class="f">:</span> <span class="f">(</span><span class="b">gid_t</span><span class="f">)</span><span class="f">(</span><span class="b">gid</span><span class="f">)</span><span class="f">)</span>
<a name="54" /><span class="True">      54:</span> 
<a name="55" /><span class="True">      55:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19jb252ZXJ0X3VpZF8w"><span class="b">__convert_uid</span></a><span class="f">(</span><span class="b">size</span><span class="f">,</span> <span class="b">uid</span><span class="f">)</span> \
<a name="56" /><span class="True">      56:</span>     <span class="f">(</span><span class="b">size</span> <span class="f">&gt;=</span> <span class="m">sizeof</span><span class="f">(</span><span class="b">uid</span><span class="f">)</span> <span class="f">?</span> <span class="f">(</span><span class="b">uid</span><span class="f">)</span> <span class="f">:</span> <a href="cpu.c_macros_noref.html#_aGlnaDJsb3d1aWRfMA__"><span class="b">high2lowuid</span></a><span class="f">(</span><span class="b">uid</span><span class="f">)</span><span class="f">)</span>
<a name="57" /><span class="True">      57:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19jb252ZXJ0X2dpZF8w"><span class="b">__convert_gid</span></a><span class="f">(</span><span class="b">size</span><span class="f">,</span> <span class="b">gid</span><span class="f">)</span> \
<a name="58" /><span class="True">      58:</span>     <span class="f">(</span><span class="b">size</span> <span class="f">&gt;=</span> <span class="m">sizeof</span><span class="f">(</span><span class="b">gid</span><span class="f">)</span> <span class="f">?</span> <span class="f">(</span><span class="b">gid</span><span class="f">)</span> <span class="f">:</span> <a href="cpu.c_macros_noref.html#_aGlnaDJsb3dnaWRfMA__"><span class="b">high2lowgid</span></a><span class="f">(</span><span class="b">gid</span><span class="f">)</span><span class="f">)</span>
<a name="59" /><span class="True">      59:</span>     
<a name="60" /><span class="True">      60:</span> 
<a name="61" /><span class="False">      61:</span> <span class="f">#</span><span class="n">else</span>
<a name="62" /><span class="False">      62:</span> 
<a name="63" /><span class="False">      63:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19jb252ZXJ0X3VpZF8w"><span class="b">__convert_uid</span></a><span class="f">(</span><span class="b">size</span><span class="f">,</span> <span class="b">uid</span><span class="f">)</span> <span class="f">(</span><span class="b">uid</span><span class="f">)</span>
<a name="64" /><span class="False">      64:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19jb252ZXJ0X2dpZF8w"><span class="b">__convert_gid</span></a><span class="f">(</span><span class="b">size</span><span class="f">,</span> <span class="b">gid</span><span class="f">)</span> <span class="f">(</span><span class="b">gid</span><span class="f">)</span>
<a name="65" /><span class="False">      65:</span> 
<a name="66" /><span class="True">      66:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* !CONFIG_UID16 */</span>
<a name="67" /><span class="True">      67:</span> 
<a name="68" /><span class="True">      68:</span> <span class="k">/* uid/gid input should be always 32bit uid_t */</span>
<a name="69" /><span class="True">      69:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_U0VUX1VJRF8w"><span class="b">SET_UID</span></a><span class="f">(</span><span class="b">var</span><span class="f">,</span> <span class="b">uid</span><span class="f">)</span> <span class="m">do</span> <span class="f">{</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_X19jb252ZXJ0X3VpZF8w"><span class="b">__convert_uid</span></a><span class="f">(</span><span class="m">sizeof</span><span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">,</span> <span class="f">(</span><span class="b">uid</span><span class="f">)</span><span class="f">)</span><span class="f">;</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="70" /><span class="True">      70:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_U0VUX0dJRF8w"><span class="b">SET_GID</span></a><span class="f">(</span><span class="b">var</span><span class="f">,</span> <span class="b">gid</span><span class="f">)</span> <span class="m">do</span> <span class="f">{</span> <span class="f">(</span><span class="b">var</span><span class="f">)</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_X19jb252ZXJ0X2dpZF8w"><span class="b">__convert_gid</span></a><span class="f">(</span><span class="m">sizeof</span><span class="f">(</span><span class="b">var</span><span class="f">)</span><span class="f">,</span> <span class="f">(</span><span class="b">gid</span><span class="f">)</span><span class="f">)</span><span class="f">;</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="71" /><span class="True">      71:</span> 
<a name="72" /><span class="True">      72:</span> <span class="k">/*</span>
<a name="73" /><span class="True">      73:</span> <span class="k"> * Everything below this line is needed on all architectures, to deal with</span>
<a name="74" /><span class="True">      74:</span> <span class="k"> * filesystems that only store 16 bits of the UID/GID, etc.</span>
<a name="75" /><span class="True">      75:</span> <span class="k"> */</span>
<a name="76" /><span class="True">      76:</span> 
<a name="77" /><span class="True">      77:</span> <span class="k">/*</span>
<a name="78" /><span class="True">      78:</span> <span class="k"> * This is the UID and GID that will get written to disk if a filesystem</span>
<a name="79" /><span class="True">      79:</span> <span class="k"> * only supports 16-bit UIDs and the kernel has a high UID/GID to write</span>
<a name="80" /><span class="True">      80:</span> <span class="k"> */</span>
<a name="81" /><span class="True">      81:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">fs_overflowuid</span><span class="f">;</span>
<a name="82" /><span class="True">      82:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">fs_overflowgid</span><span class="f">;</span>
<a name="83" /><span class="True">      83:</span> 
<a name="84" /><span class="True">      84:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVGQVVMVF9GU19PVkVSRkxPV1VJRF8w"><span class="b">DEFAULT_FS_OVERFLOWUID</span></a>    <span class="c">65534</span>
<a name="85" /><span class="True">      85:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVGQVVMVF9GU19PVkVSRkxPV0dJRF8w"><span class="b">DEFAULT_FS_OVERFLOWGID</span></a>    <span class="c">65534</span>
<a name="86" /><span class="True">      86:</span> 
<a name="87" /><span class="True">      87:</span> <span class="k">/*</span>
<a name="88" /><span class="True">      88:</span> <span class="k"> * Since these macros are used in architectures that only need limited</span>
<a name="89" /><span class="True">      89:</span> <span class="k"> * 16-bit UID back compatibility, we won&apos;t use old_uid_t and old_gid_t</span>
<a name="90" /><span class="True">      90:</span> <span class="k"> */</span>
<a name="91" /><span class="True">      91:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_ZnNfaGlnaDJsb3d1aWRfMA__"><span class="b">fs_high2lowuid</span></a><span class="f">(</span><span class="b">uid</span><span class="f">)</span> <span class="f">(</span><span class="f">(</span><span class="b">uid</span><span class="f">)</span> <span class="f">&amp;</span> <span class="f">~</span><span class="c">0xFFFF</span> <span class="f">?</span> <span class="f">(</span><span class="b">uid16_t</span><span class="f">)</span><span class="b">fs_overflowuid</span> <span class="f">:</span> <span class="f">(</span><span class="b">uid16_t</span><span class="f">)</span><span class="f">(</span><span class="b">uid</span><span class="f">)</span><span class="f">)</span>
<a name="92" /><span class="True">      92:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_ZnNfaGlnaDJsb3dnaWRfMA__"><span class="b">fs_high2lowgid</span></a><span class="f">(</span><span class="b">gid</span><span class="f">)</span> <span class="f">(</span><span class="f">(</span><span class="b">gid</span><span class="f">)</span> <span class="f">&amp;</span> <span class="f">~</span><span class="c">0xFFFF</span> <span class="f">?</span> <span class="f">(</span><span class="b">gid16_t</span><span class="f">)</span><span class="b">fs_overflowgid</span> <span class="f">:</span> <span class="f">(</span><span class="b">gid16_t</span><span class="f">)</span><span class="f">(</span><span class="b">gid</span><span class="f">)</span><span class="f">)</span>
<a name="93" /><span class="True">      93:</span> 
<a name="94" /><span class="True">      94:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bG93XzE2X2JpdHNfMA__"><span class="b">low_16_bits</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="f">(</span><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">&amp;</span> <span class="c">0xFFFF</span><span class="f">)</span>
<a name="95" /><span class="True">      95:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_aGlnaF8xNl9iaXRzXzA_"><span class="b">high_16_bits</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span>    <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">&amp;</span> <span class="c">0xFFFF0000</span><span class="f">)</span> <span class="f">&gt;&gt;</span> <span class="c">16</span><span class="f">)</span>
<a name="96" /><span class="True">      96:</span> 
<a name="97" /><span class="True">      97:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _LINUX_HIGHUID_H */</span>
<a name="98" /><span class="True">      98:</span> </pre>
  </body>
</html>
